#include <iostream>
#include "mprpcapplication.h"
#include "user.pb.h"
#include "mprpcchannel.h"

int main(int argc, char *argv[])
{
    // 整个程序启动之后，想使用mprpc框架来享受服务调用，一定要先使用框架的初始化函数

    MprpcApplication::Init(argc, argv);
    // 演示如何调用远程发布的rpc方法Login

    fixbug::UserServiceRpc_Stub stub(new MpRpcChannel());
    // stub.Login(); // RpcChannel ->RpcChannel::callmethod 集中来做所有的rpc方法调用的参数序列化和网络发送
    fixbug::LoginRequest request;
    request.set_name("zhang san");
    request.set_pwd("pwd");
    fixbug::LoginResponse response;

    // 发起rpc调用，参数是请求对象和响应对象，是同步的
    stub.Login(nullptr, &request, &response, nullptr);

    // rpc待用完成，都调用的结果 z这个result 是看定义的protubuf的参数
    if (response.result().errcode() == 0) // 这个0是约定好了的
    {
        std::cout << "rpc login response success :" << response.success() << std::endl;
    }
    else
    {
        std::cout << "rpc login response error:" << response.result().errmsg() << std::endl;
    }

    // 调用register方法
    fixbug::RegisterRequest req;
    req.set_id(2000);
    req.set_name("lisi");
    req.set_pwd("6666");
    fixbug::RegisterResponse rsp;

    stub.Register(nullptr, &req, &rsp, nullptr);
    std::cout<<rsp.result().errcode()<<std::endl;
    if (rsp.result().errcode() == 0) // 这个0是约定好了的
    {
        std::cout << "rpc register response success :" << rsp.success() << std::endl;
    }
    else
    {
        std::cout << "rpc register response error:" << rsp.result().errmsg() << std::endl;
    }
    return 0;
}